Python基于Selenium实现爬取网络视频 |
您所在的位置:网站首页 › selenium 录制 › Python基于Selenium实现爬取网络视频 |
文章目录
一、什么是爬虫二、Selenium实现爬虫的基本流程三、环境搭建1.前置条件2.Selenium安装1.安装2.验证
3.ChromeDriver安装1.安装2.验证
四、示例:爬取国家中小学网络云平台所有视频数据1. 分析网页结构2. 连接浏览器3. 打开指定的页面4. 模拟用户行为5. 提取数据
总结
一、什么是爬虫
爬虫: 一段自动抓取互联网信息的程序,从互联网上抓取对于我们有价值的信息。 从技术层面来说就是:通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地,进而提取自己需要的数据,存放起来使用; 二、Selenium实现爬虫的基本流程 分析网页结构连接浏览器打开指定的页面模拟用户行为提取数据 三、环境搭建所谓工欲善其事必先利其器,所以我们先配置好我们的开发环境。 1.前置条件 Windows系统已安装Python3已安装pip包管理工具 2.Selenium安装在cmd命令行中,输入:pip install selenium 1.安装
我们使用Geogle浏览器配合Selenium使用,所以我们需要安装ChromeDriver驱动的配置。 1.安装 首先,我们需要先确认自己浏览器的版本,打开Chrome浏览器->帮助->关于Goolge Chrome(G)![]() ![]() ![]() ![]() 因为我直接复制到python安装环境的Scripts目录下了,所以直接输入ChromeDriver,如下提示既没有问题。 网页地址:https://tongbu.eduyun.cn/tbkt/tbkthtml/1.html 1. 分析网页结构 首先我们先看下我们需要爬取的页面的整体架构![]() 然后当我们点击了视频的播放按钮之后,会弹出一个新页面。 此处写了个生成器,主要是数据过多,我想只在需要的时候在获取。 def fibonacci(): # 学段 wait.until(presence_of_element_located((By.ID, "xueduan"))) elements_xd = browser.find_element(By.ID, "xueduan").find_elements(By.TAG_NAME, "dd") for len_xd in range(len(elements_xd)): element_xd_a = browser.find_element(By.XPATH, "//dl[@id='xueduan']/dd[{}]".format(len_xd + 1)) element_xd_a_text = element_xd_a.text print(element_xd_a_text) element_xd_a.click() # 年级 wait.until(presence_of_element_located((By.ID, "nianjiDl"))) elements_nj = browser.find_elements(By.XPATH, "//dl[@id='nianjiDl']/dd[@value]") for len_nj in range(len(elements_nj)): element_nj_a = browser.find_element(By.XPATH, "//dl[@id='nianjiDl']/dd[@value][{}]".format(len_nj + 1)) element_nj_a_text = element_nj_a.text print(element_nj_a_text) element_nj_a.click() # 学科 wait.until(presence_of_element_located((By.ID, "xuekeDl"))) elements_xk = browser.find_elements(By.XPATH, "//dl[@id='xuekeDl']/dd") for len_xk in range(len(elements_xk)): element_xk_a = browser.find_element(By.XPATH, "//dl[@id='xuekeDl']/dd[{}]".format(len_xk + 1)) element_xk_a_text = element_xk_a.text print(element_xk_a_text) element_xk_a.click() # 单元 wait.until(presence_of_element_located((By.ID, "UlDzfw"))) elements_nl = browser.find_elements(By.XPATH, "//ul[@id='UlDzfw']/li") for len_nl in range(len(elements_nl)): element_nl_li = browser.find_element(By.XPATH, "//ul[@id='UlDzfw']/li[{}]".format(len_nl + 1)) element_nl_li_a = element_nl_li.find_element(By.XPATH, "h3/a") element_nl_li_span = element_nl_li.find_element(By.XPATH, "h3/a/span") element_nl_li_a_text = element_nl_li_a.text print(element_nl_li_a_text) print("##{}".format(element_nl_li_span.text)) element_nl_li_a.click() # 视频列表 wait.until(presence_of_element_located((By.ID, "casel"))) elements_casel = browser.find_elements(By.XPATH, "//div[@id='casel']/dl") for len_casel in range(len(elements_casel)): element_casel_li_a = browser.find_element(By.XPATH, "//div[@id='casel']/dl[{}]/dd/h4/a".format( len_casel + 1)) element_casel_li_a_text = element_casel_li_a.text print(element_casel_li_a_text) # 视频地址 browser.get(element_casel_li_a.get_attribute("href")) # 具体视频连接在script里面,使用正则表达式获取连接 _script = browser.find_element_by_xpath("//div[@class='ShiPin_C']/script[2]").get_attribute( "textContent") # 获取m3u8中的下载连接 searchObj = re.search(r'file:\s*"(.*)?",', _script, re.M | re.I) browser.back() yield element_xd_a_text, element_nj_a_text, element_xk_a_text, element_nl_li_a_text, element_casel_li_a_text, searchObj.group( 1)示例: 因为数据很多,所以这里只提取了两个视频信息。下载使用的是ffmpeg,你可以使用python写代码下载也行,这里只是为了简便。 注意: 视频url是m3u8的。某些视频需要设置请求头referer为http://tongbu.eduyun.cn/,不然获取不到视频。 总结使用Selenium爬取网页数据,我们可以模拟正常用户的行为,就和人在点击是一致的。 这种方式为某些需要点击触发啊之类的数据请求提供了一个方便,不过selenium最主要的作用还是用作自动测试化。 我们要爬取任何网页的数据,首先需要做的都是分析网页结构,分析网页链接等等,比如某些视频的权限之类的,这样才能游刃有余。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |